home *** CD-ROM | disk | FTP | other *** search
- { CList.p}
- { Copyright ⌐ 1991, Michael J. Conrad}
- {}
- { For use with the DialogUtils unit. Handles lists.}
-
-
- UNIT CList;
-
- INTERFACE
-
- USES
- CCdevIntf;
-
- IMPLEMENTATION
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.IList (lRect: Rect;
- w: WindowPtr;
- font, size: integer;
- ProcID: integer;
- hasScroll: Boolean);
- VAR
- r: Rect;
-
- BEGIN
- listRect := lRect;
- listWindow := w;
- theFont := font;
- theSize := size;
- hasScrollBar := hasScroll;
-
- r := lRect;
- IF hasScroll THEN
- r.right := r.right - 15;
-
- SetRect(dataBounds, 0, 0, 1, 0);
- cSize.h := r.right - r.left;
- cSize.v := 0;
-
- TextFont(theFont);
- TextSize(theSize);
-
- theList := LNew(r, dataBounds, cSize, ProcID, listWindow, True, False, False, hasScrollBar);
- IF theList <> NIL THEN
- BEGIN
- theList^^.selFlags := lOnlyOne + lNoNilHilite;
- LDoDraw(True, theList);
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.Free;
- BEGIN
- IF theList <> NIL THEN
- LDispose(theList);
- INHERITED Free;
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.ListUpdate;
- VAR
- r: Rect;
-
- BEGIN
- IF theList <> NIL THEN
- BEGIN
- TextFont(theFont);
- TextSize(theSize);
-
- LUpdate(listWindow^.visRgn, theList);
-
- r := listRect;
- IF hasScrollBar THEN
- r.right := r.right - 15;
- InsetRect(r, -1, -1);
- FrameRect(r);
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.SelectCell (theCell: Cell);
- BEGIN
- LSetSelect(True, theCell, theList);
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.AddToList (theStr: Str255);
- BEGIN
- IF theList <> NIL THEN
- BEGIN
- cSize.h := 0;
- cSize.v := LAddRow(1, 200, theList);
- LSetCell(Pointer(ord(@theStr) + 1), length(theStr), cSize, theList);
- LDraw(cSize, theList);
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.AddListData (theData: styleListRec);
- BEGIN
- IF theList <> NIL THEN
- BEGIN
- cSize.h := 0;
- cSize.v := LAddRow(1, 200, theList);
- LAddToCell(@theData, sizeof(theData), cSize, theList);
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- PROCEDURE CList.RemoveFromList;
- BEGIN
- IF theList <> NIL THEN
- BEGIN
- cSize.h := 0;
- LDelRow(1, lastCell.v, theList);
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- FUNCTION CList.GetListData (theCell: Cell): Ptr;
- VAR
- theLen: integer;
- ptrLen: longint;
- theData: Ptr;
- result: Str255;
-
- BEGIN
- IF theList = NIL THEN
- Exit(GetListData);
-
- theLen := 256;
- theData := NewPtrClear(theLen);
- IF memError = noErr THEN
- BEGIN
- LGetCell(theData, theLen, theCell, theList);
- ptrLen := theLen;
- SetPtrSize(theData, ptrLen);
- GetListData := theData;
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- FUNCTION CList.DoList (event: EventRecord): Boolean;
- VAR
- doubleClick: Boolean;
-
- BEGIN
- DoList := False;
-
- IF theList <> NIL THEN
- BEGIN
- TextFont(theFont);
- TextSize(theSize);
-
- doubleClick := LClick(event.where, event.modifiers, theList);
- lastCell := LLastClick(theList);
- DoList := doubleClick;
- END;
- END;
-
- {------------------------------Ñ------------------------------}
-
- END.